package com.xrh.core.generater.bean;

import cn.hutool.core.util.StrUtil;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @function 数据库配置
 * @author ronghui.xiao
 * @date 2017年6月24日
 */
@Data
public class DataBaseConfig {
	
	@ApiModelProperty("数据库ip")
	private String ip;
	
	@ApiModelProperty("数据库端口")
	private String port;
	
	@ApiModelProperty("数据库名称")
	private String dataBaseName;
	
	@ApiModelProperty("数据库账号")
	private String dbUserName;
	
	@ApiModelProperty("数据库密码")
	private String password;
	
	@ApiModelProperty("数据库类型标志(0:mysql,1:oracle,2:sqlserver)")
	private int dbTypeFlag = 0;
	
	@ApiModelProperty("SID或服务名(0 : SID , 1 : 服务名)")
	private int oracleSIDOrServerNameFlag = -1;
	
	@ApiModelProperty("oracle数据库SID或服务名文本")
	private String oracleSIDOrServerName;
	
	public DataBaseConfig() {
		
	}
	
	public DataBaseConfig(String ip, String port, String dataBaseName,String dbUserName, String password) {
		this.ip = ip;
		this.port = port;
		this.dataBaseName = dataBaseName;
		this.dbUserName = dbUserName;
		this.password = password;
	}
	
	//获取驱动
	public String getDriver() {
		
		if(dbTypeFlag == 0)
			return "com.mysql.cj.jdbc.Driver";
		
		if(dbTypeFlag == 1)
			return "oracle.jdbc.driver.OracleDriver";
		
		return null;
	}
	
	/**
	 * @function 创建一个oracle的配置
	 * @author 肖荣辉
	 * @date 2022年11月29日
	*/
	public static DataBaseConfig createOracleConfig(String ip, String port ,  String dataBaseName  , String dbUserName , String password , int oracleSIDOrServerNameFlag , String oracleSIDOrServerName ) {
		
		//oracle的数据库账号相当于mysql的数据库名称
		DataBaseConfig dataBaseConfig = new DataBaseConfig(ip , port , dataBaseName  , dbUserName, password);
		
		dataBaseConfig.setDbTypeFlag(1);
		dataBaseConfig.setOracleSIDOrServerNameFlag(oracleSIDOrServerNameFlag);
		dataBaseConfig.setOracleSIDOrServerName(oracleSIDOrServerName);
		
		return dataBaseConfig;
		
	}
	
	/**
	 * @function 创建一个mysql的配置
	 * @author 肖荣辉
	 * @date 2022年11月29日
	*/
	public static DataBaseConfig createMysqlConfig(String ip, String port , String dbUserName , String password) {
		
		//oracle的数据库账号相当于mysql的数据库名称
		DataBaseConfig dataBaseConfig = new DataBaseConfig(ip , port , dbUserName  , dbUserName, password);
		
		dataBaseConfig.setDbTypeFlag(0);
		
		return dataBaseConfig;
		
	}
	
	/**
	 * @function 创建一个mysql的配置
	 * @author 肖荣辉
	 * @date 2022年11月29日
	*/
	public static DataBaseConfig createMysqlConfig(String ip, String port , String dataBaseName , String dbUserName , String password) {
		
		//oracle的数据库账号相当于mysql的数据库名称
		DataBaseConfig dataBaseConfig = new DataBaseConfig(ip , port , dataBaseName  , dbUserName, password);
		
		dataBaseConfig.setDbTypeFlag(0);
		
		return dataBaseConfig;
		
	}
	
	/**
	 * @function 创建一个sqlserver的配置
	 * @author 肖荣辉
	 * @date 2022年11月29日
	*/
	public static DataBaseConfig createSqlServerConfig(String ip, String port , String dataBaseName ,  String dbUserName , String password) {
		
		//oracle的数据库账号相当于mysql的数据库名称
		DataBaseConfig dataBaseConfig = new DataBaseConfig(ip , port , dataBaseName  , dbUserName, password);
		
		dataBaseConfig.setDbTypeFlag(2);
		
		return dataBaseConfig;
		
	}
	
	
	public String getJdbcUrl(){
		
		//若不是
		if(dbTypeFlag == 0) {
			
			if(StrUtil.isBlank(dataBaseName))
				return "jdbc:mysql://"+ip+":"+port+"?autoReconnect=true&useSSL=false&characterEncoding=utf-8&useUnicode=true&serverTimezone=Asia/Shanghai";
			
			return "jdbc:mysql://"+ip+":"+port+"/"+dataBaseName+"?autoReconnect=true&useSSL=false&characterEncoding=utf-8&useUnicode=true&serverTimezone=Asia/Shanghai";
			
		}
					
		if(dbTypeFlag == 1)
			return "jdbc:oracle:thin:@" + ip + ":" + port + (oracleSIDOrServerNameFlag == 0 ? ":"  : "/") + oracleSIDOrServerName;
		
		if(dbTypeFlag == 2)
			return "jdbc:sqlserver://" + ip + ":"+port + ";DatabaseName=" + dataBaseName;
	
		return null;
	}
	
}
